#include<stdio.h>
#include<signal.h>
#include<unistd.h>
#include<string.h>

struct sigaction act, oact;

void handler(int signo)
{
   printf("get a signal: %d\n", signo);
   sigaction(SIGINT, &oact, NULL);
}

int main()
{
   memset(&act, 0, sizeof(act));
   memset(&oact, 0, sizeof(oact));

   act.sa_handler = handler;
   act.sa_flags = 0;
   sigemptyset(&act.sa_mask);

   sigaction(SIGINT, &act, &oact);
   while(1){
       printf("I am a process!\n");
       sleep(1);
   }
   return 0;
}
//void handler(int signo)
//{
//	printf("get a %d signal\n",signo);
//}
//void printpending(sigset_t *pending)
//{
//	 int i= 1;    
//	for(; i <= 31; i++)
//	{
//	    if(sigismember(pending, i))//判断指定信号在没在信号集里
//		{
//	        printf("1 ");
//	    }
//	    else
//		{
//	    	printf("0 ");
//	    }
//	    }
//	    printf("\n");
//}
//int main()
//{
//	signal(2,handler); 
//	sigset_t set,oset;//用户定义空间变量 
//	sigemptyset(&set);//初始化set和oset使得成为一个确定的数 
//	sigemptyset(&oset);
//	sigaddset(&set,2);//将二号信号加入信号集//SIGINT
//	sigprocmask(SIG_SETMASK,&set,&oset);//阻塞二号信号
//	
//	
//	sigset_t pending;
//	int count=0;
//	while(1)
//	{
//		sigemptyset(&pending);
//		sigpending(&pending);//读取未决信号集，通过pending参数传出
//		printpending(&pending);	
//		sleep(1);
//		count++;
//		if(count==10)
//		{
//			sigprocmask(SIG_SETMASK, &oset, NULL); //恢复曾经的信号屏蔽字
//			  printf("恢复信号屏蔽字\n");	
//		}	
//	} 
//	 
//	return 0;
//}
//
